約 3,357,946 件
https://w.atwiki.jp/mycenamemo/pages/16.html
属性MOD ライフル
https://w.atwiki.jp/bacardi_ava/pages/45.html
紗夢san hattyori AVAのこと 活動時間 兵科 MAP 武器 PCスペック/使用デバイス等 使用パソコン OS CPU グラボ サウンドカード キーボード モニター マウス マウスパッド ヘッドホン
https://w.atwiki.jp/r2tw/pages/96.html
MODの導入 Rome2のMODの導入方法は非常にシンプル。 Steam Workshopへ行き、目当てのMODを見つけたらボタンを一つクリックするだけで導入は完了です。 MODの無効化&削除 MODを導入後に無効化をしたい場合は、ランチャーの「MOD MANAGER」より、対象MODのチェックを外せば無効化は完了です。 MODを削除したい場合は、ランチャーの「MOD MANAGER」より、対象MODの「DELETE」をクリックするだけで削除は完了です。 ※上記を実行後、「PLAY」をクリックしてMODが適用されていないことを確認してみてください。 MODの紹介 military_force.locの日本語訳ファイル ここの日本語化MODだとローマ以外の軍団名が英語音訳になっているので、 それをなんとなくそれっぽい日本語訳に変えるファイル(翻訳はあまり厳密ではありません)。 ※使い方 Pack File Managerでmilitary_force.locに下記ファイルをインポート。 http //www1.axfc.net/u/3510145.zip
https://w.atwiki.jp/bannerlord/pages/92.html
基本事項用語 実装パターン レイヤー追加パターンの実装例Example UI Opponent Health Bar 基本事項 用語 Gauntlet UI Bannerlord のユーザーインターフェースに用いられているフレームワークです。 Model-View-ViewModel アーキテクチャー Gauntlet UI は Model-View-ViewModel (MVVM) と呼ばれるアーキテクチャーパターンを採用しています。要は、ゲームの領域、UI の領域、その2つを仲介する領域、の3層に分離させることで、情報を整理しやすく、また分業しやすくするという発想のようです。UI の MOD の場合、実装が必要なのはこの内の View と ViewModel になります。 この辺は、WPF や XAML を触ったことのある方ならお馴染みなのかもしれませんが、そうでない方も、あまり深く考えずに概念として何となく把握していれば大丈夫です。 ウィジェット GUI を構成する部品です。TaleWorlds.GauntletUI や TaleWorlds.MountAndBlade.GauntletUI.Widgets あたりに一通り揃っています。基本的にはこれらで事足りるので、自分でウィジェットを定義するということはあまり無いのではないかと思われます。 Prefab GUI のレイアウトを定義する XML ファイルです。プレハブ建築のプレハブと同じで、出来合いの部品 (ウィジェットや他の Prefab) をどういう風に組み合わせて配置するかを指定し、なにがしかの UI 機能を提供する大きめの部品として独立させたものです。 Prefab は TaleWorlds.Engine.GauntletUI.GauntletLayer.LoadMovie() するたびに読み込まれるので、ゲーム起動中にレイアウトを確認しながら編集していくなんてこともできます。(もちろん、構文エラー等があればその時点でクラッシュしますが) Brush GUI のスタイルを定義する XML ファイルです。Prefab と Brush の関係は、HTML と CSS の関係と似たようなものだそうです。 Widget に複数の状態が定義されていれば、それぞれの状態に応じたスプライト画像やフォント等を Brush に持たせることで、Widget に視覚的変化を与えることができます。例えば、Wiget がデフォルト状態にある時のスプライト、マウスオーバー時のスプライト、クリックした時のスプライト、Disable 時のスプライトなどをまとめられる、と言えばわかりやすいでしょうか。 ブラシは、Native 等の公式モジュールの GUI\Brushes に多数定義されています。 実装パターン 一部のパターンでしか実験していません。「たぶんこういうことだろう」レベルの推測が混じっています。 追加 既存の UI スクリーンにレイヤーを追加し、そこに自前の GUI を描画する (AddLayer)。 標準的な方法です。自分で View も ViewModel も用意するので好きなようにデザインできますが、既存の GUI そのものを書き換えることはできません。 モジュールとしての競合は起こりませんが、意図せず他の MOD の GUI と表示位置がかぶってしまうことはあり得ます。 改変 (未検証) 既存の UI スクリーンのレイアウトだけを変更する (XML 改変)。 使用するデータソース (ViewModel) はそのままで、XML の書き換えによって GUI の配置なんかを変える方法です。簡単だと思いますが、おそらくやれることは限定的です。また、MOD の競合が発生しうる方法だと思われます。 上書き (未検証) 既存の UI スクリーン全体をオーバーライドする (OverrideView)。 上書きする UI スクリーンが提供していた機能を自分で実装することになるため難易度は高いでしょう。また、MOD の競合が発生しうる方法だと思われます。 新規作成 自前の UI スクリーンを作成し、何かのイベントに伴ってそのスクリーンを呼び出す (PushScreen)。 Push/Pop のスタック形式なのでモーダルなポップアップとかに向いていると思います。 一部改変 たとえばオプション項目の追加などがこれに当たりますが、現状ではできないようです。 ただ、可能にする方法は検討されているとのこと。 Beyond that, we continue to work on Adding support for adding options to the options screen レイヤー追加パターンの実装例 Example UI ExampleUI プロジェクトSubModule.cs ViewsSampleMapView.cs SampleMissionView.cs ViewModelsTestWindowVM.cs ExampleUI.Window.xml View と ViewModel の関係がはっきりするように階層 (名前空間) を分けています。 ExampleUI.Window.xml は、 [Bannerlord インストールフォルダー]\Modules\ExampleUI\GUI\Prefabs フォルダーを作成し、その中に保存します。 MVVM では疎結合 (各層の結びつきが緩やか) なのが望ましいとされているそうなので、参照はできるだけ一方向になるようにしましょう。 すなわち、 View が ViewModel のインスタンスを持ち、その逆方向のアクセスはしない Model (ゲーム内の要素) に属するデータの加工は View の中では行わず、ViewModel で行う という感じです。 コード +SubModule.cs モジュールのエントリーポイントです。 using ExampleUI.Views;using SandBox.View.Map;using System;using TaleWorlds.Core;using TaleWorlds.Engine.Screens;using TaleWorlds.MountAndBlade;using TaleWorlds.MountAndBlade.View.Missions;using TaleWorlds.MountAndBlade.View.Screen; namespace ExampleUI{ public class SubModule MBSubModuleBase { private MissionView _missionView; private MapView _mapView; // Mission (平たく言えば、キャラクターが動き回ったり攻撃したりできる状況) に対する // MOD の処理 (ビヘイビアー) の登録はこのメソッドで行います。 // OnBeforeMissionBehaviourInitialize() と OnMissionBehaviourInitialize() の違いは // MissionBehaviour.OnBehaviourInitialize() の前に呼ばれるか後によばれるかです。 public override void OnBeforeMissionBehaviourInitialize(Mission mission) { base.OnBeforeMissionBehaviourInitialize(mission); // ViewCreatorManager.CreateMissionView() は一応ファクトリーメソッドっぽいのですが、 // 公式のコードには、これを介さず単に new MissionView() しているものもあったりして // よく分かりません。どっちにしろ動くのは動きます。 _missionView = ViewCreatorManager.CreateMissionView SampleMissionView (false, mission, Array.Empty object ()); mission.AddMissionBehaviour(_missionView); /* mission.AddMissionBehaviour(_missionView = new SampleMissionView()); */ // このサンプルでは、全ての Mission でテスト GUI が表示されてしまいますが、 // 戦闘シーンだけに表示したいなどといった場合、何らかの工夫が必要になるでしょう。 // // ちなみに、OnBeforeMissionBehaviourInitialize() 時点で mission.Mode は MissionMode.StartUp 固定なので、 // 以下の方法は使えませんでした。 /* if (mission.Mode == MissionMode.Battle) { _missionView = ViewCreatorManager.CreateMissionView SampleMissionView (false, mission, Array.Empty object ()); mission.AddMissionBehaviour(_missionView); } */ } // MapScreen (ワールドマップの描画スクリーン) には OnBeforeMissionBehaviourInitialize() に相当する // メソッドが用意されていないので、スクリーンの Push/Pop イベントを利用してレイヤーを挿入しています。 public override void OnGameInitializationFinished(Game game) { base.OnGameInitializationFinished(game); ScreenManager.OnPushScreen += OnScreenManagerPushScreen; // Obsolete /* ScreenManager.OnPopScreen += OnScreenManagerPopScreen; */ } public override void OnGameEnd(Game game) { ScreenManager.OnPushScreen -= OnScreenManagerPushScreen; // Obsolete /* ScreenManager.OnPopScreen -= OnScreenManagerPopScreen; */ base.OnGameEnd(game); } private void OnScreenManagerPushScreen(ScreenBase pushedScreen) { if (pushedScreen is MapScreen mapScreen) { _mapView = mapScreen.AddMapView SampleMapView (Array.Empty object ()); } /* else if (pushedScreen is MissionScreen missionScreen missionScreen.Mission != null) { // MissionScreen は、まず空の MissionScreen を Push してから、ローディング画面を // 表示しつつスクリーンを初期化していく感じなので、MapScreen と同じ手法は使えません。 // // この時点で missionScreen.Mission には中身がないので、CreateMissionView() は失敗します。 _missionView = ViewCreatorManager.CreateMissionView SampleMissionView (false, missionScreen.Mission, Array.Empty object ()); missionScreen.AddMissionView(_missionView); } */ } [Obsolete("1.6.0より前の手法")] private void OnScreenManagerPopScreen(ScreenBase poppedScreen) { if (_mapView != null poppedScreen is MapScreen mapScreen) { // 1.6.0 からは MapScreen が破棄される際に勝手に MapView.OnFinalize() を呼んでくれるようになったので // MapView と MapScreen の寿命を同じにする限りでは、MapScreen.RemoveMapView() をする必要がなくなりました。 mapScreen.RemoveMapView(_mapView); _mapView = null; } else if (_missionView != null poppedScreen is MissionScreen) { // MissionView については、MissionScreen.OnEndMission() が OnMissionScreenFinalize() の呼び出しから // RemoveMissionBehaviour() まで勝手にやってくれます。 _missionView = null; } // したがって、_mapView と _missionView はもはや必要のないフィールドなのですが、説明用に残してあります。 } }} +SampleMapView.cs using ExampleUI.ViewModels;using SandBox.View.Map;using TaleWorlds.Engine.GauntletUI;using TaleWorlds.GauntletUI.Data;using TaleWorlds.InputSystem;using TaleWorlds.Library; namespace ExampleUI.Views{ public class SampleMapView MapView { private TestWindowVM _dataSource; private GauntletLayer _gauntletLayer; private IGauntletMovie _gauntletMovie; protected override void CreateLayout() { base.CreateLayout(); _dataSource = new TestWindowVM(); // localOrder (レイヤーの優先度) が小さいほど、他のレイヤーより下 (画面奥) に描画されます。 // // 例えば、部隊が町などに入った際に左に表示されるメニュー (GauntletMenuBase) のレイヤー優先度は 100 なので、 // それより小さい値に設定すればテストウィンドウがメニューの下に表示されるようになります。 // ESC メニュー (GauntletMapEscapeMenu) のレイヤー優先度が 4400 なので、これよりは小さい値に // した方がよさそうです。あるいは、ESC メニュー表示中は GUI を非表示にする処理を追加しましょう。 _gauntletLayer = new GauntletLayer(4000); Layer = _gauntletLayer; // Movie (= Screen に投影するもの) とは、XML から取得した UI の構造と、ViewModel (表示するデータ) を合わせた概念です。 _gauntletMovie = _gauntletLayer.LoadMovie("ExampleUI.Window", _dataSource); // このレイヤーの描画領域に対して行われた入力のうち、受け取るものをビットフラグによって管理しています。 _gauntletLayer.InputRestrictions.SetInputRestrictions(true, InputUsageMask.MouseButtons); MapScreen.AddLayer(_gauntletLayer); } // MapScreen.OnFinalize() によって呼び出されます。 protected override void OnFinalize() { MapScreen.RemoveLayer(_gauntletLayer); _gauntletLayer.InputRestrictions.ResetInputRestrictions(); _gauntletLayer.ReleaseMovie(_gauntletMovie); _gauntletLayer = null; Layer = null; _dataSource.OnFinalize(); base.OnFinalize(); } // 毎ティック行う処理を記述します。 // // dt デルタタイム。前回のティックからの経過時間です。 protected override void OnFrameTick(float dt) { base.OnFrameTick(dt); if (MapScreen.Input.IsKeyPressed(InputKey.Home)) { _dataSource.IsVisible ^= true; // bool 反転 } } }} +SampleMissionView.cs SampleMapView とは使用するメソッドが違うだけで、やっていることは全く同じです。 using ExampleUI.ViewModels;using TaleWorlds.Engine.GauntletUI;using TaleWorlds.GauntletUI.Data;using TaleWorlds.InputSystem;using TaleWorlds.MountAndBlade.View.Missions; namespace ExampleUI.Views{ public class SampleMissionView MissionView { private TestWindowVM _dataSource; private GauntletLayer _gauntletLayer; private IGauntletMovie _gauntletMovie; public override void OnMissionScreenInitialize() { base.OnMissionScreenInitialize(); _dataSource = new TestWindowVM(); // localOrder (レイヤーの優先度) が小さいほど、他のレイヤーより下 (画面奥) に描画されます。 // // ESC メニュー (GauntletMissionEscapeMenu) のレイヤー優先度が 50 なので、 これよりは小さい // した方がよさそうです。あるいは、ESC メニュー表示中は GUI を非表示にする処理を追加しましょう。 _gauntletLayer = new GauntletLayer(40); // Movie (= Screen に投影するもの) とは、XML から取得した UI の構造と、ViewModel (表示するデータ) を合わせた概念です。 _gauntletMovie = _gauntletLayer.LoadMovie("ExampleUI.Window", _dataSource); // このレイヤーの描画領域に対して行われた入力のうち、受け取るものをビットフラグによって管理しています。 /* _gauntletLayer.InputRestrictions.SetInputRestrictions(true, InputUsageMask.MouseButtons); */ // Mission 中はマウスを視点移動や攻撃に使うため、ポインティングデバイスとして使うには、 // 戦闘結果画面において、Tab を押す - リザルトとマウスカーソル表示 - ボタンが押せるようになる // とやっているような感じで、キーボード操作を挟んで切り替える必要があります。 // 今回はそこまで実装していないため、Mission 中は閉じるボタンをクリックできません。 MissionScreen.AddLayer(_gauntletLayer); } // MissionScreen.OnEndMission() によって呼び出されます。 public override void OnMissionScreenFinalize() { MissionScreen.RemoveLayer(_gauntletLayer); _gauntletLayer.ReleaseMovie(_gauntletMovie); _gauntletLayer = null; _dataSource.OnFinalize(); base.OnMissionScreenFinalize(); } // 毎ティック行う処理を記述します。 // // dt デルタタイム。前回のティックからの経過時間です。 public override void OnMissionScreenTick(float dt) { base.OnMissionScreenTick(dt); if (Input.IsKeyPressed(InputKey.Home)) { _dataSource.IsVisible ^= true; // bool 反転 } } }} +TestWindowVM.cs ViewModel とは View を抽象化したものです。今回の例では、 画面左上にウィンドウを表示 ウィンドウの中には閉じるボタン1つだけ 閉じるボタンを押すとウィンドウが閉じる Home キーでも開いたり閉じたりできる というモデルで行きます。 TestWindowVM は View から完全に分離されているので、今回使う2つの View どちらにもそのまま使用できます。 using TaleWorlds.Core;using TaleWorlds.Library;// View-ViewModel の参照を一方向にするため using ExampleUI.Views をやっていません。 namespace ExampleUI.ViewModels{ // ViewModel は全て TaleWorlds.Library.ViewModel を継承して作ります。 // クラス名に VM を付けなければならないという決まりがあるわけではないのですが、 // 公式の ViewModel は全て VM を付けているようなので踏襲しています。 public class TestWindowVM ViewModel { private bool _isVisible; public TestWindowVM() { IsVisible = true; } // ViewModel のプロパティやメソッドは、View の LoadMovie で関連付けられた XML Prefab から参照できます。 // XML の方を見てもらえば、それらがどのように使われているか分かるかと思います。 [DataSourceProperty] public bool IsVisible { get = _isVisible; set { if (_isVisible != value) { _isVisible = value; // このメソッドを呼ぶことで、TestWindowVM にバインディングされた View に対して // TestWindowVM.IsVisible プロパティの変更通知が行き、プロパティを参照している // ウィジェットの方も状態が変化するという仕組みです。 OnPropertyChangedWithValue(value, "IsVisible"); } } } // こちらは値の変更がない固定ラベルなので、set アクセサーや OnPropertyChangedWithValue() は使っていません。 [DataSourceProperty] public string WindowTitle = "Test Window"; // 以前はラベルにも日本語が使えたのですが、1.6.0 から文字化けするようになってしまいました。 [DataSourceProperty] public string CloseButtonLabel = "Close"; // ButtonWidget のクリックイベントに応じて呼ばれるよう、ExampleUI.Window.xml に記述してあります。 public void OnCloseButtonClick() { IsVisible = false; InformationManager.DisplayMessage(new InformationMessage("ウィンドウを閉じました。\n再度開くには Home キーを押してください。")); } }} DataSourceProperty 属性 公式の ViewModel 派生クラスのプロパティにはこの属性を与えられたものが多く見受けられますが、ソースコードを見ても特に何か定義されているわけでもなく、実際、属性を付けても付けなくても動作は変わらないように見えます。唯一、ViewModel.Properties プロパティで DataSourceProperty のリストを作るのに使われているようですが、このプロパティは他からは特に参照されていないようです。一応、XML から参照されるプロパティには全てこの属性を付けてあります。 +ExampleUI.Window.xml ExampleUI で使うウィンドウの Prefab です。 Prefab Window Widget WidthSizePolicy="Fixed" HeightSizePolicy="Fixed" SuggestedWidth="400" SuggestedHeight="300" IsVisible="@IsVisible" Children Standard.Window Parameter.Title="@WindowTitle" Children Standard.PopupCloseButton Parameter.ButtonText="@CloseButtonLabel" Parameter.ButtonAction="OnCloseButtonClick" / /Children /Standard.Window /Children /Widget /Window /Prefab Widget TaleWorlds.GauntletUI.Widget クラスです。Widget クラスは基底クラスとしてデータを保持しているだけで、UI としての機能はありません。ここでは、他の UI をまとめるコンテナとして使っています。 SizePolicy Fixed 指定の幅にしますStretchToParent 親要素の幅に合わせますCoverChildren 子要素を全て表示できる幅にします IsVisible="@IsVisible" 名前が同じで分かりにくいですが、最初の方が Widget クラスのプロパティ、@付きの方がデータソースとなる ViewModel 派生クラス (今回の例で言えば TestWindowVM) のプロパティとなります。このように指定することで、TestWindowVM.IsVisible の中で呼んである ViewModel.OnPropertyChangedWithValue() によって発せられたイベントが Widget に届くようになり、TestWindowVM.IsVisible と Widget.IsVisible が連動するわけです。 Standard.Window と Standard.PopupCloseButton 公式の Prefab を使っています。公式の Prefab も大半は各シチュエーションに特化した大型のものばかりで、そのままでの再利用はしにくいですが、Native\GUI\Prefabs\Standard にあるものは比較的小型で汎用性が高くなっています。 Parameter Standard.Window 等の Prefab では Parameter が宣言されているものがあり、Widget のプロパティに値を渡すのと同じ感覚で、Prefab 自体に値を渡すことができます。Prefab 側では、自分の中の Widget に受け取った値を渡すよう記述されています。 結果 MapScreen MissionScreen 左上にウィンドウっぽいものが表示されています。Prefab を適当に選んだのでデザインがめちゃくちゃですが、画面上にとりあえず何かを表示する例ということで大目に見てください。 手順をおおまかにまとめると、 作りたい UI を考える その構想に沿った GUI の構造 (Prefab) と表示するデータ (ViewModel) を用意する 用意したものを、表示先がワールドマップなら MapView、戦闘などの Mission なら MissionView で LoadMovie() する View をスクリーンに追加する となります。 Opponent Health Bar 今度はもう少し実践的な MOD を作っていきます。見出しが示す通り、戦っている相手の HP バーを表示する MOD です。 イメージとしてはこんな感じ。 OpponentHealthBar プロジェクトSubModule.cs MissionOpponentHealthBar.cs OpponentHealthVM.cs OpponentHealthBar.xml OpponentHealthBar.xml は、 [Bannerlord インストールフォルダー]\Modules\OpponentHealthBar\GUI\Prefabs の中に保存します。 バージョン1 それでは、とりあえず簡単に文字で表示するところから始めてみます。 +SubModule.cs using System;using TaleWorlds.MountAndBlade;using TaleWorlds.MountAndBlade.View.Missions; namespace OpponentHealthBar{ public class SubModule MBSubModuleBase { public override void OnBeforeMissionBehaviourInitialize(Mission mission) { base.OnBeforeMissionBehaviourInitialize(mission); mission.AddMissionBehaviour( ViewCreatorManager.CreateMissionView MissionOpponentHealthBar (false, mission, Array.Empty object ())); } }} +MissionOpponentHealthBar.cs using TaleWorlds.Core;using TaleWorlds.Engine.GauntletUI;using TaleWorlds.GauntletUI.Data;using TaleWorlds.MountAndBlade;using TaleWorlds.MountAndBlade.View.Missions; namespace OpponentHealthBar{ public class MissionOpponentHealthBar MissionView { private OpponentHealthVM _dataSource; private GauntletLayer _gauntletLayer; private IGauntletMovie _gauntletMovie; public MissionOpponentHealthBar() { ViewOrderPriorty = 20; } public override void OnMissionScreenInitialize() { base.OnMissionScreenInitialize(); _dataSource = new OpponentHealthVM(); _gauntletLayer = new GauntletLayer(ViewOrderPriorty); _gauntletMovie = _gauntletLayer.LoadMovie("OpponentHealthBar", _dataSource); MissionScreen.AddLayer(_gauntletLayer); } public override void OnMissionScreenFinalize() { MissionScreen.RemoveLayer(_gauntletLayer); _gauntletLayer.ReleaseMovie(_gauntletMovie); _gauntletLayer = null; _dataSource.OnFinalize(); base.OnMissionScreenFinalize(); } // 画面中央 (マウスカーソルの位置) と、一番手前にある IFocusable なオブジェクトとが交差した瞬間に呼ばれます。 // // agent フォーカスした Agent。シングルプレイだと、おそらく常に Agent.Main (プレイヤーキャラクター) です。 // focusableObject フォーカスされたもの // isInteractable Talk や Use などのインタラクトが可能か // // フォーカスが 10m までしか利かないのは MissionMainAgentInteractionComponent.FocusTick() で // 決められた仕様なのでどうしようもありません。 public override void OnFocusGained(Agent agent, IFocusable focusableObject, bool isInteractable) { base.OnFocusGained(agent, focusableObject, isInteractable); _dataSource.OnFocusChanged(focusableObject); } // 今までフォーカスされていた IFocusable なオブジェクトから、フォーカスが外れた瞬間に呼ばれます。 // // agent フォーカスしていた Agent。シングルプレイだと、おそらく常に Agent.Main (プレイヤーキャラクター) です。 // focusableObject フォーカスされていたもの public override void OnFocusLost(Agent agent, IFocusable focusableObject) { base.OnFocusLost(agent, focusableObject); _dataSource.OnFocusChanged(focusableObject); } // Agent が何らかの攻撃を受けた際に呼ばれます。 // // affectedAgent 攻撃を受けた Agent // affectorAgent 攻撃を行った Agent // damage ダメージ量 // affectorWeapon 使用された武器 public override void OnAgentHit(Agent affectedAgent, Agent affectorAgent, int damage, in MissionWeapon affectorWeapon) { base.OnAgentHit(affectedAgent, affectorAgent, damage, affectorWeapon); _dataSource.OnAgentHit(affectedAgent); } // Agent が戦闘不能になった際に呼ばれます。 // // affectedAgent 攻撃を受けた Agent // affectorAgent 攻撃を行った Agent // agentState Agent の状態 // blow とどめの一撃の内容 // // 似たようなメソッドに OnAgentDeleted がありますが、そちらは // 戦闘不能になって倒れている Agent が時間経過や表示限界により消滅する際に呼ばれるようです。 public override void OnAgentRemoved(Agent affectedAgent, Agent affectorAgent, AgentState agentState, KillingBlow blow) { base.OnAgentRemoved(affectedAgent, affectorAgent, agentState, blow); _dataSource.OnAgentRemoved(affectedAgent); } }} +OpponentHealthVM.cs 今度のモデルは、 Agent (Mission 中に動きうるもの) の HP 現在値/最大値 を文字で表示する Agent にフォーカスが合うと表示、フォーカスが外れると非表示 とします。 using System;using TaleWorlds.Library;using TaleWorlds.MountAndBlade; namespace OpponentHealthBar{ public class OpponentHealthVM ViewModel { private Agent _opponent; private string _strValues; private bool _isVisible; private const string ValueFormat = "{0} / {1}"; public OpponentHealthVM() { _opponent = null; _strValues = string.Empty; _isVisible = false; } [DataSourceProperty] public string StrValues { get = _strValues; private set { if (_strValues != value) { _strValues = value; OnPropertyChangedWithValue(value, "StrValues"); } } } [DataSourceProperty] public bool IsVisible { get = _isVisible; set { if (_isVisible != value) { _isVisible = value; OnPropertyChangedWithValue(value, "IsVisible"); } } } // GUI に表示するデータの更新はこのメソッドで行います。 // ただし、ここに記述すればあとは勝手に更新されていくというものではないので、 // 自分が必要な場所では自分で呼び出さなければなりません。 public override void RefreshValues() { base.RefreshValues(); int currentValue = (int)Math.Ceiling(_opponent?.Health ?? 0f); int maxValue = (int)Math.Ceiling(_opponent?.HealthLimit ?? 0f); StrValues = string.Format(ValueFormat, currentValue, maxValue); IsVisible = _opponent != null; } public void OnFocusChanged(IFocusable focusableObject) { if (focusableObject is Agent possibleOpponent) { _opponent = (_opponent == null || _opponent != possibleOpponent) ? possibleOpponent null; RefreshValues(); } } public void OnAgentHit(Agent affectedAgent) { if (_opponent == affectedAgent) { RefreshValues(); } } public void OnAgentRemoved(Agent removedAgent) { if (_opponent == removedAgent) { // 先にフォーカスロストが発生してここには入らないかも。 OnFocusChanged(removedAgent); } } }} +OpponentHealthBar.xml Prefab Window Widget WidthSizePolicy="Fixed" HeightSizePolicy="Fixed" SuggestedWidth="430" SuggestedHeight="50" HorizontalAlignment="Center" VerticalAlignment="Top" MarginTop="250" IsVisible="@IsVisible" Children TextWidget Text="@StrValues" WidthSizePolicy="CoverChildren" HeightSizePolicy="CoverChildren" HorizontalAlignment="Center" VerticalAlignment="Center" Brush="Tooltip.Text" Brush.FontSize="24" / /Children /Widget /Window /Prefab Alignment 親要素の領域内のどちら側に寄せるかです。親要素より幅が小さい場合にしか効果がありません。この例の TextWidget で言うと、親要素は幅 430、自身は CoverChildren、つまり StrValues が入りきるだけの幅なので機能していますが、これを StretchToParent とかにすると、左寄せや右寄せが機能しなくなります。 Margin Left, Top, Right, Bottom のマージンです。幅+マージンが要素の実際の幅になります。 以上を実行した状態が下の画像です。 ちょっと見にくいですが、画面上部中央に相手の HP 100/100 が表示されていますね。フォーカスを外せば数字は消えます。しかし、今のところ町人だろうが馬だろうが Agent なら何にでも表示されてしまいますので、そこは改良が必要です。 バージョン2 次はバーの導入とその他の改良を行っていきたいと思います。 バー表示に使うのは FillBarWidget です。ソースコードや、FillBarWidget を使用している公式の Prefab を見てみると、FillBarWidget.MaxAmount プロパティと FillBarWidget.InitialAmmount プロパティに値を渡せばとりあえず動きそうです。よって、ViewModel 側でその値を用意してやる必要があります。 +OpponentHealthVM.cs [DataSourceProperty] public int CurrentValue { get = _currentValue; private set { if (_currentValue != value) { _currentValue = value; OnPropertyChangedWithValue(value, "CurrentValue"); } } } [DataSourceProperty] public int MaxValue { get = _maxValue; private set { if (_maxValue != value) { _maxValue = value; OnPropertyChangedWithValue(value, "MaxValue"); } } } // GUI に表示するデータの更新はこのメソッドで行います。 // ただし、ここに記述すればあとは勝手に更新されていくというものではないので、 // 自分が必要な場所では自分で呼び出さなければなりません。 public override void RefreshValues() { base.RefreshValues(); // 元々ローカル変数だったものを、View から参照できるようにプロパティに昇格しました。 CurrentValue = (int)Math.Ceiling(_opponent?.Health ?? 0f); MaxValue = (int)Math.Ceiling(_opponent?.HealthLimit ?? 0f); StrValues = string.Format(ValueFormat, CurrentValue, MaxValue); IsVisible = _opponent != null; } public void OnFocusChanged(IFocusable focusableObject) { // 適切な相手に表示されるよう条件を追加しました。 if (focusableObject is Agent possibleOpponent possibleOpponent.IsHuman possibleOpponent.IsEnemyOf(Agent.Main)) { _opponent = (_opponent == null || _opponent != possibleOpponent) ? possibleOpponent null; RefreshValues(); } } ViewModel にプロパティを追加したので、今度は Prefab を通じてそれらを FillBarWidget に渡します。 +OpponentHealthBar.xml Prefab Window FillBarWidget WidthSizePolicy="Fixed" HeightSizePolicy="Fixed" SuggestedWidth="430" SuggestedHeight="50" HorizontalAlignment="Center" VerticalAlignment="Top" MarginTop="250" ContainerWidget="FillBarContainer" FillWidget="FillVisualParent\FillVisual" MaxAmount="@MaxValue" InitialAmount="@CurrentValue" IsVisible="@IsVisible" Children Widget Id="FillVisualParent" WidthSizePolicy="Fixed" HeightSizePolicy="StretchToParent" SuggestedWidth="400" HorizontalAlignment="Center" VerticalAlignment="Center" MarginTop="10" MarginBottom="10" Sprite="BlankWhiteSquare" Color="#202020A0" Children BrushWidget Id="FillVisual" WidthSizePolicy="Fixed" HeightSizePolicy="StretchToParent" SuggestedWidth="400" HorizontalAlignment="Left" Brush="Mission.MainAgentHUD.HeroHealthBar.Fill" / /Children /Widget Widget Id="FillBarContainer" WidthSizePolicy="StretchToParent" HeightSizePolicy="StretchToParent" Sprite="options_memory_progress_frame" / TextWidget Text="@StrValues" WidthSizePolicy="CoverChildren" HeightSizePolicy="CoverChildren" HorizontalAlignment="Center" VerticalAlignment="Center" PositionYOffset="3" Brush="Tooltip.Text" Brush.FontSize="24" / /Children /FillBarWidget /Window /Prefab FillBarWidget バージョン1ではただの Widget だったトップレベルのウィジェットを FillBarWidget に変更してあります (3行目)。 FillVisual 赤ゲージの Brush を保持した BrushWidget の ID です (9行目)。このように、Widget には任意の ID がつけられます。それによって、他のウィジェットを操作するタイプのウィジェットに対し、操作対象がどれなのか伝えることができます。 ここでは、FillBarWidget.FillWidget プロパティに渡して、FillBarWidget が "FillVisual" の幅を操作できるようにしています。 親要素の "FillVisualParent" はゲージが減った部分を埋める背景画像です。"BlankWhiteSquare" という無地画像を、暗い半透明に着色・透過させて使っています。 FillBarContainer 14行目にある、スプライト画像を保持した Widget の ID です。これを FillBarWidget.ContainerWidget プロパティに渡してバーの枠としています。 ところで、Mission 用の GUI はそのままだとフォトモード中でも表示されてしまいます。構図を決めている間に GUI が表示されてしまうのは邪魔ですから、MissionView を使うときは、フォトモード中 GUI を非表示にする処理を追加しておきましょう。 +MissionOpponentHealthBar.cs // フォトモードで構図を決めている最中に GUI が表示されないようにするための処理です。 // この処理を入れても入れなくても、どちらにしろ出力される画像ファイルに GUI は写りません。 public override void OnPhotoModeActivated() { base.OnPhotoModeActivated(); _gauntletLayer._gauntletUIContext.ContextAlpha = 0f; } public override void OnPhotoModeDeactivated() { base.OnPhotoModeDeactivated(); _gauntletLayer._gauntletUIContext.ContextAlpha = 1f; } 結果 攻撃前 攻撃後 どうでしょう、一応 HP バーらしくなったのではないでしょうか。 他にも、与えたダメージ分のバーをスライドさせる視覚効果とか、フォーカスが外れてからバーが消えるまでに時間差を設けるとか、改良はいろいろ考えられますが、サンプルではここまでです。興味があったら自分の MOD として実装してみてください。 +コード最終形 SubModule.cs using System;using TaleWorlds.MountAndBlade;using TaleWorlds.MountAndBlade.View.Missions; namespace OpponentHealthBar{ public class SubModule MBSubModuleBase { public override void OnBeforeMissionBehaviourInitialize(Mission mission) { base.OnBeforeMissionBehaviourInitialize(mission); mission.AddMissionBehaviour( ViewCreatorManager.CreateMissionView MissionOpponentHealthBar (false, mission, Array.Empty object ())); } }} MissionOpponentHealthBar.cs using TaleWorlds.Core;using TaleWorlds.Engine.GauntletUI;using TaleWorlds.GauntletUI.Data;using TaleWorlds.MountAndBlade;using TaleWorlds.MountAndBlade.View.Missions; namespace OpponentHealthBar{ public class MissionOpponentHealthBar MissionView { private OpponentHealthVM _dataSource; private GauntletLayer _gauntletLayer; private IGauntletMovie _gauntletMovie; public MissionOpponentHealthBar() { ViewOrderPriorty = 20; } public override void OnMissionScreenInitialize() { base.OnMissionScreenInitialize(); _dataSource = new OpponentHealthVM(); _gauntletLayer = new GauntletLayer(ViewOrderPriorty); _gauntletMovie = _gauntletLayer.LoadMovie("OpponentHealthBar", _dataSource); MissionScreen.AddLayer(_gauntletLayer); } public override void OnMissionScreenFinalize() { MissionScreen.RemoveLayer(_gauntletLayer); _gauntletLayer.ReleaseMovie(_gauntletMovie); _gauntletLayer = null; _dataSource.OnFinalize(); base.OnMissionScreenFinalize(); } // 画面中央 (マウスカーソルの位置) と、一番手前にある IFocusable なオブジェクトとが交差した瞬間に呼ばれます。 // // agent フォーカスした Agent。シングルプレイだと、おそらく常に Agent.Main (プレイヤーキャラクター) です。 // focusableObject フォーカスされたもの // isInteractable Talk や Use などのインタラクトが可能か // // フォーカスが 10m までしか利かないのは MissionMainAgentInteractionComponent.FocusTick() で // 決められた仕様なのでどうしようもありません。 public override void OnFocusGained(Agent agent, IFocusable focusableObject, bool isInteractable) { base.OnFocusGained(agent, focusableObject, isInteractable); _dataSource.OnFocusChanged(focusableObject); } // 今までフォーカスされていた IFocusable なオブジェクトから、フォーカスが外れた瞬間に呼ばれます。 // // agent フォーカスしていた Agent。シングルプレイだと、おそらく常に Agent.Main (プレイヤーキャラクター) です。 // focusableObject フォーカスされていたもの public override void OnFocusLost(Agent agent, IFocusable focusableObject) { base.OnFocusLost(agent, focusableObject); _dataSource.OnFocusChanged(focusableObject); } // Agent が何らかの攻撃を受けた際に呼ばれます。 // // affectedAgent 攻撃を受けた Agent // affectorAgent 攻撃を行った Agent // damage ダメージ量 // affectorWeapon 使用された武器 public override void OnAgentHit(Agent affectedAgent, Agent affectorAgent, int damage, in MissionWeapon affectorWeapon) { base.OnAgentHit(affectedAgent, affectorAgent, damage, affectorWeapon); _dataSource.OnAgentHit(affectedAgent); } // Agent が戦闘不能になった際に呼ばれます。 // // affectedAgent 攻撃を受けた Agent // affectorAgent 攻撃を行った Agent // agentState Agent の状態 // blow とどめの一撃の内容 // // 似たようなメソッドに OnAgentDeleted がありますが、そちらは // 戦闘不能になって倒れている Agent が時間経過や表示限界により消滅する際に呼ばれるようです。 public override void OnAgentRemoved(Agent affectedAgent, Agent affectorAgent, AgentState agentState, KillingBlow blow) { base.OnAgentRemoved(affectedAgent, affectorAgent, agentState, blow); _dataSource.OnAgentRemoved(affectedAgent); } // フォトモードで構図を決めている最中に GUI が表示されないようにするための処理です。 // この処理を入れても入れなくても、どちらにしろ出力される画像ファイルに GUI は写りません。 public override void OnPhotoModeActivated() { base.OnPhotoModeActivated(); _gauntletLayer._gauntletUIContext.ContextAlpha = 0f; } public override void OnPhotoModeDeactivated() { base.OnPhotoModeDeactivated(); _gauntletLayer._gauntletUIContext.ContextAlpha = 1f; } }} OpponentHealthVM.cs using System;using TaleWorlds.Library;using TaleWorlds.MountAndBlade; namespace OpponentHealthBar{ public class OpponentHealthVM ViewModel { private Agent _opponent; private int _currentValue; private int _maxValue; private string _strValues; private bool _isVisible; private const string ValueFormat = "{0} / {1}"; public OpponentHealthVM() { _opponent = null; _strValues = string.Empty; _isVisible = false; } [DataSourceProperty] public int CurrentValue { get = _currentValue; private set { if (_currentValue != value) { _currentValue = value; OnPropertyChangedWithValue(value, "CurrentValue"); } } } [DataSourceProperty] public int MaxValue { get = _maxValue; private set { if (_maxValue != value) { _maxValue = value; OnPropertyChangedWithValue(value, "MaxValue"); } } } [DataSourceProperty] public string StrValues { get = _strValues; private set { if (_strValues != value) { _strValues = value; OnPropertyChangedWithValue(value, "StrValues"); } } } [DataSourceProperty] public bool IsVisible { get = _isVisible; set { if (_isVisible != value) { _isVisible = value; OnPropertyChangedWithValue(value, "IsVisible"); } } } // GUI に表示するデータの更新はこのメソッドで行います。 // ただし、ここに記述すればあとは勝手に更新されていくというものではないので、 // 自分が必要な場所では自分で呼び出さなければなりません。 public override void RefreshValues() { base.RefreshValues(); // 元々ローカル変数だったものを、View から参照できるようにプロパティに昇格しました。 CurrentValue = (int)Math.Ceiling(_opponent?.Health ?? 0f); MaxValue = (int)Math.Ceiling(_opponent?.HealthLimit ?? 0f); StrValues = string.Format(ValueFormat, CurrentValue, MaxValue); IsVisible = _opponent != null; } public void OnFocusChanged(IFocusable focusableObject) { // 適切な相手に表示されるよう条件を追加しました。 if (focusableObject is Agent possibleOpponent possibleOpponent.IsHuman possibleOpponent.IsEnemyOf(Agent.Main)) { _opponent = (_opponent == null || _opponent != possibleOpponent) ? possibleOpponent null; RefreshValues(); } } public void OnAgentHit(Agent affectedAgent) { if (_opponent == affectedAgent) { RefreshValues(); } } public void OnAgentRemoved(Agent removedAgent) { if (_opponent == removedAgent) { // 先にフォーカスロストが発生してここには入らないかも。 OnFocusChanged(removedAgent); } } }} OpponentHealthBar.xml Prefab Window FillBarWidget WidthSizePolicy="Fixed" HeightSizePolicy="Fixed" SuggestedWidth="430" SuggestedHeight="50" HorizontalAlignment="Center" VerticalAlignment="Top" MarginTop="250" ContainerWidget="FillBarContainer" FillWidget="FillVisualParent\FillVisual" MaxAmount="@MaxValue" InitialAmount="@CurrentValue" IsVisible="@IsVisible" Children Widget Id="FillVisualParent" WidthSizePolicy="Fixed" HeightSizePolicy="StretchToParent" SuggestedWidth="400" HorizontalAlignment="Center" VerticalAlignment="Center" MarginTop="10" MarginBottom="10" Sprite="BlankWhiteSquare" Color="#202020A0" Children BrushWidget Id="FillVisual" WidthSizePolicy="Fixed" HeightSizePolicy="StretchToParent" SuggestedWidth="400" HorizontalAlignment="Left" Brush="Mission.MainAgentHUD.HeroHealthBar.Fill" / /Children /Widget Widget Id="FillBarContainer" WidthSizePolicy="StretchToParent" HeightSizePolicy="StretchToParent" Sprite="options_memory_progress_frame" / TextWidget Text="@StrValues" WidthSizePolicy="CoverChildren" HeightSizePolicy="CoverChildren" HorizontalAlignment="Center" VerticalAlignment="Center" PositionYOffset="3" Brush="Tooltip.Text" Brush.FontSize="24" / /Children /FillBarWidget /Window /Prefab 名前
https://w.atwiki.jp/sperkbird/pages/7.html
MODパックはこちらからどうぞ 導入MOD ※Forge等の前提系MODは記述していません アイテム・要素追加系 MOD名 解説 備考 Buildcraft 3(BC3) 動力(MJ)の概念+配管要素を追加、さらにMJで動作する建築・土木系の各種工業機械や、パイプなどの輸送系装置を追加する。 ├AdditionalPipes(AP) パイプ要素の強化。挿入パイプやテレポートパイプなど、便利なパイプを複数追加する。 ├ExtraTanks 大容量タンクの追加。中身に液体が入った状態を保持しつつ撤去&回収して持ち運べる、携帯タンクとしての機能も備える。 ├Logistic Pipes(LP) パイプ要素の強化。システムが難解かつ高コストだが、より高度な配送システムを構築することができる。 ├PowerConverters MJとEUの変換用機械を追加する。MJ→EU用とEU→MJ用は別機械で、さらにMJ→EUの変換機は電圧に応じて3種類ある。 ├safetyvalve 作業完了後のマシンにMJが注がれつつける等によってMJ消費先がなくなり、エネルギーパイプが爆発するのを防ぐため、余剰エネルギーを逃がしパイプの爆発を防ぐ「安全弁」を追加する。 ├Thermal Expansion(TE) 内部にMJを保持したまま持ち運びができる携帯式MJタンク、水+燃料や溶岩で稼働する新エンジンなどを始め、多くのマシンを追加。 └Tube Stuff 「スタック不可アイテムも使えるようになった全自動作業台」、「パイプとチューブの接続点」などの小物系を追加。また、レッドストーンやニコライトなどの圧縮ブロックも追加される。 IndustrialCraft 2(IC2) 電力(EU)の概念+配線要素を追加、さらにEUで稼働する各種機械・ツール等を追加する。 ├AdvancedMachines 強化版粉砕機・圧縮機・抽出機を追加する。いずれの機械も誘導加熱炉と同じように空焚きができ、完成品スロットが2つあるのが特徴。 ├CompactSolars 3種のソーラー発電機を追加。1つで複数個分のソーラー発電機の出力に相当し、スペースの節約になる。 ├IC2NuclearControl 原子炉の温度測定アイテムと温度が一定以上になると信号を出す温度モニターなどを追加 ├Modular Force Field System(MFFS) フォースフィールド(FF)という無敵の障壁を展開する、FFジェネレータを追加する。FFの展開には専用のエネルギーを消費する。 └Modular Powersuits カスタム可能なパワードスーツを追加する。機能の追加は専用の作業台で行う。 MineFactoryReloaded(MFR) 全自動機構作成の為の様々な機械を追加する。 RedPower(RP) レッドストーン要素の強化。回路作成の簡易化だけでなく、分割ブロックやLEDなどのインテリア用アイテムも多数追加する。 ComputerCraft(CC) プログラムを作成、実行できるコンピューターとロボットを追加する。使用言語はLua。 ├MiscPeripherals 各MODと連動した非常に多くのタートルを追加する。 └OpenCCSensors ドロップアイテム・看板・ストレージ等の各種センサーを追加。 Applied Energistics(AE) アイテム貯蔵・輸送要素の強化。アイテムをデジタルデータ(ME)化して大量に保存したり、高速で輸送したりすることができるようになる。 IronChests アイテム貯蔵要素の強化。ラージチェストに出来ないが、通常のチェストよりも容量の大きい、鉄・金・ダイヤなどのチェストを追加する。 OmniTools 万能レンチと辞書テーブルを追加。レンチの方はIC・BC・MFR・TEのレンチの機能が集約され、辞書テーブルはForge鉱石辞書に登録されている互換鉱石を纏めることができる。 MystCraft 新Dimensionを作ることができるようになる。もっぱら素材ワールド生成などに使っているので、あまり気にすることはないかもしれない。 小物・機能改善系 MOD名 解説 備考 Rei sMinimap 周囲の地形を右上のミニマップに表示する。また、任意の地点を登録することで、その地点までの距離や方角を表示するWayPoint機能も付いている。 CraftGuide レシピ把握の補助。Gキー(デフォルト設定)を押すことで、各種レシピを表示することができる。 FlatBedrock 岩盤がY1に平坦に生成されるようになる。 InventoryTweaks インベントリ整頓。Rキー(デフォルト設定)押下、または追加されるソートボタンをクリックすることで所持品やチェスト内の整理ができる。 BitmapFont Minecraftでビットマップフォントを利用できるようにする。F6キーで設定用GUIが開く。フォーラムではフォントデータも配布している。 SpawnChecker MOBが沸く可能性のあるブロックを視覚的に示してくれる。沸き潰しの補助に。 Treecapitator 木こりMOD。斧系統ツールを使って木を伐採すると、繋がっている原木が一括で伐採される。
https://w.atwiki.jp/gtasa-vehicles/pages/204.html
Uranus 概要 車種:スポーツカー 分類 ストリートレースカー 和音:ウラヌス ドア:2枚 乗員:2名 モデル:三菱・エクリプス(初代)、プリムス・レーザー、イーグル・タロン(初代) 日本語訳 天王星 性能 重量:1500kg 最高速:180km/h 駆動方式 FR 解説 ストリートレースカーに含まれる一台。 分類上はスポーツカーだが、スポーツカーの中では下から数えたほうが早いレベルの低性能。 出現率も他のスポーツカーと比べると低いが、ロスサントスの空港付近などに出現を確認。 ミッション「Zeroing in」クリア後にWang Carsのショールームに固定出現するが、その周辺で大量湧きはしないようだ。 GTA4ではデザインが一新されたが、GTA5では廃車体のみの登場という悲惨な事に。 ご臨終 ただしGTAオンラインにはGTA4のUranusに手を加えて制作されたと思われる、オムニスという車が存在する。 GTA5では3代目エクリプスをモデルにした車が「ペナンブラ」として登場。 序盤のミッションでケツから漏れてきたうn…燃料を撃って消し炭にした人も多いはず… GTAオンラインでは『ロスサントス・サマースペシャル』アップデートで2代目エクリプスをモデルとしたペナンブラFFも追加されている。 GTA4 GTA5 モデル 三菱・エクリプス(初代) プリムス・レーザー イーグル・タロン
https://w.atwiki.jp/civilization/pages/459.html
MOD インターフェイスを統合と個別で分離。CGEの統合内容はページがあるのでそっちに誘導。MODパックはBtSとそれ以外で分けて更新のある物を上に配置。 -- MODパックにBtS対応バージョンを付記(3.13専用の物もあるので)。ゲーム内容変更/追加を分類。 -- デッドリンク3件(確認しただけで他にもあるかも)。あと大日本帝国MOD2.1グラフィック変更MODのtxtを見る限り大日本帝国MOD2.1というのが別にありそうだけど見当たらない・・・ -- 対応バージョンとかデッドリンクもついてわかりやすくなりましたね、貴国(ら)の編集には感謝している(+5) -- modの説明で「現在」を使う人がいるが、いつの時点の現在かわからなくなるので不適切。修正お願いします>該当modに詳しい人 -- 3.17で動くMODも説明文に欲しいな。 -- 独占 -- 3.17対応増えてて嬉しいぜ -- BUGの信奉者達、是非ページの方で色々紹介するんだ。 -- 大規模改変するならコメント残してほしいね -- 前にやったのはグラフィックをMODパックの下に移動したのと、CGE私家版統合をCGEの項に移動、BUGの追加MODをBUGの項に移動などです。 -- 偉人画像の大将軍がなくなってるのですがミラーとかないのでしょか -- MOD入れてみたらユニットグラフィックが表示されなくなりました。アンインストールしてインストールし直しましたが、また表示されなくなりました。どうすればよいでしょうか -- ↑↑全画像セットDLすればWLでもBtSでも大丈夫 -- 先日The Great People Modのページを編集した方へ:オリジナルの画像セットのリンクが消され、代わりに作者に対して何の言及も無いまとめ画像セットへのリンクとなっていますが、これは作者に対してあまりにも失礼では無いでしょうか?元に戻していただけるよう希望します。 -- スパイ画像作者 ↑mod作成のマナーを良くわからん人が、使う人に良かれと思ってやったんだろう。多分逃げちゃって出てこないだろうから、思い入れあるなら、自分でまとめ画像作ってアップし直し、wikiのページを修正した方がいいと思う。 -- 別に思い入れがある訳では無いけど、大手を振ってやられちゃねぇ…と言う事です。まあ現在スタスタの管理人に問い合わせている最中なので、返答が有りしだい直そうと思ってます。 -- スパイ画像作者 BUG紹介ページのインストール方法を書いてみました。インストール自体難しくはないので短いですが。 -- BUG Modの設定項目と使用時の各担当相、情報画面を追加しました。 -- ↑なんだか見づらくなった気がしなくもない -- ↑ゲーム画面があればインターフェースの雰囲気が分かるかなと思って貼り付けましたが、大きすぎましたね。リンクで飛べるようにして表示サイズを小さくしました。少しは見やすくなりましたか? -- BUGページの内容追加者 ↑見やすくなったと思います -- GreatPersonModほか2つを同時に追加できるようファイルを書き換えたものを、勝手ではありますがBUGページ内に用意しました。対した動作確認はしていませんが… -- "Like a Revolution NEO ./LaR NEO" ってのはこれで合ってんの? -- BUG4.2Jが来たのでfor BUG3種更新。誰かBULL作ってくれー -- グラフィックMODにVarietas Delectatを追加し日本語化ファイルのリンクをこちらに移動しました。 -- ミュージックの"敵文明を訪れたときに~"はwavファイルが混ざってるな。変換しないといけないか? -- マルチを行う際におすすめのMODありますか? -- Like a Revolution NEO で勝利条件で宇宙船の部品の個数が664181個とかデタラメな数字になる、それと活版とっても町・村のコインが増えない -- BBAI for 3.19私家を使っているのでTradeResourcePanel for BUG4.0がほしいんですがどこかに残っていますか -- マルチではMODは使えません。逆に進行を阻害します、MODを完全に外した状態で参加してください。 -- ↑↑forBUG旧ファイル上げました。てきとーに使ってください。http //wiki.rk3.jp/civ4/fileup/file/1769.zip -- ↑うお,3点セットですか!ありがたく頂戴します!! -- 「Increase of Tactics」が他から浮いてるんで修正したよ。作った本人/登録した本人じゃないが。 -- CivGoldの指導者及びUU・UB紹介ページって消えました?読んでるだけで楽しいページとして重宝してたんですが -- 以前うぷろだに上げてた日本語化パッチへのリンクを追加しました(World War 2 1939とFury Road) -- 自宅じゃトレントできないし、ネカフェも禁止。Rise of Mankindの2.8のファイルの大きいのって、トレント以外で落とせない? -- 多分ここから落とせるhttp //atomicgamer.com/files/81748/rise-of-mankind-full -- 自分でいじれればもっと楽しめるだろうなと思ったらMOD作成指南あった。夢が広がりんぐ(^ω^ ) ヌルゲーマーから廃人への架け橋的ページだと思った -- ↑ようこそ dark side へ! -- Leaders of Varietas Delectathaは日本語版に対応してますか? -- Wonderful Rainbow World消えてる・・・ -- modの更新も停滞してきたな -- Leader Plus for LNTF が消えてるね -- Fanatics 抄訳の昭和天皇の記述→外人ふざけんな -- Wonderful Rainbow WorldのBtS3.17用いつ出るの? -- Wonderful Rainbow WorldのBtS3.17用いつ出るの? -- ↑3.17でもできるぞ -- 3.19のCGEってまだリリースされてないのかな? --
https://w.atwiki.jp/gta5vehicles/pages/146.html
このページはhttp //www18.atwiki.jp/gta5vehicles/?cmd=upload act=listpageからの引用です @メニュー 新規ページ作成 新規ページ作成(その他) このページをコピーして新規ページ作成 このウィキ内の別ページをコピーして新規ページ作成 アップロードファイルから新規ページ作成 他のホームページから引用して新規ページ作成 スレッド式掲示板から引用して新規ページ作成 アットウィキで新規ウィキ作成 [PR] 無料ホームページ @PAGES [PR] おすすめ iPhone アプリ情報 [PR] おすすめ Android アプリ情報 [PR] お得なオークション情報 [PR] レンタル2ch風掲示板 @chs 編集 ページ編集 ページ名変更 ページの閲覧/編集権限変更 ページの編集モード変更 このページにファイルをアップロード このウィキにファイルをアップロード メニューを編集 表示 最新版変更点 (差分) 編集履歴 (バックアップ) リンク元 このページへのトラックバック このページをPDFで表示 (試験中) このウィキの全ページ一覧 編集履歴のあるページ一覧 このウィキのタグ一覧 このwikiの更新情報RSS このwikiの新着ページRSS ツール このウィキ内を検索 このウィキの管理者に連絡 @wikiパーツ @wikiパーツ:あなたのサイトにWikiデータを簡単表示! 最近更新したページの一覧を表示する 最近作成したページの一覧を表示する このwiki内を検索するフォームを表示する このwikiのタグクラウドを表示する 自動リンク辞書を利用する @wiki便利ツール @wikiパーツ:あなたのサイトにウィキデータを簡単表示! まとめサイト作成支援ツール RSSかんたん作成 興味キーワードをチェック!!(RSSナビ) いろんなblogのRSSかんたん作成ページ アマゾン商品検索(簡単アフィリエイト) ウィキに株式情報(日本)を表示 ウィキに株式情報(中国)を表示 かんたんHTML直接入力 Q Aサイトかんたん連携作成 ウィキに為替情報を表示 はてなアンテナと簡単連携 @wiki ホットワード @wiki 全体検索 このページを通報・違反報告する ヘルプ ご利用ガイド ワープロモードご利用ガイド 初心者ガイド @wiki助け合い掲示板 wiki(ウィキ)って何? 良くある質問集 プラグイン一覧 編集モードの違いについて 不具合や障害を見つけたら 管理・設定マニュアル このウィキに参加 ログイン Grand Theft Auto V車まとめ @ ウィキ アップロードファイルをもつページ一覧 Blista Compact GTA5 beta Blist C.jpg Buffalo GTA5 Beta Buffalo.jpg Emperor GTA5 Beta Emperor.jpg Feltzer feltzer.png GTA5 Beta Felzer 2.jpg Futo GTA 5 Beta Futo.JPG Habanero GTA5 Beta Habanero.jpg GTA5 Beta Habanero 2.jpg Huntley Sport or Huntley GTA5 Beta Huntley.jpg Landstalker GTA5 Beta Landstalker.jpg Mesa GTA5 Beta Mesa.png Perennial 5 Beta Perenial.JPG Police Cruiser GTA5 Beta Police Car.JPG Police Maverick GTA5 Beta Police maverick.JPG Premier GTA5 Beta Premier.jpg Sedan GTA5 Beta Lokus or Olacle.jpg GTA5 Beta Lokus or olacle 2.png Skimmer GTA5 Beta Skimmer.gif Sultan GTA5 Beta Sultan.jpg Tornado GTAV Beta Tornado.jpg Unknow Sedan 2 Pic6.gif Unknow SUV Pic.gif ページ一覧|wiki内検索| ツールボックス 下から選んでください 新しいページを作成する 以下から選択してください-------------------------新しいページページ一覧@wikiパーツ検索------------------------- ヘルプ/FAQもご覧ください。 メニュー メニュー トップページ右メニュー登場予定車両コメントコメント/コメント GTAVの車について登場人物と愛車車種一覧 ├セダン、コンパクトカー一覧 ├ワゴン、ミニバン一覧 ├クーペ、スポーツカー一覧 ├マッスルカー、クラッシック車一覧 ├ローライダー一覧 ├SUV、ピックアップトラック一覧 ├バン、大型車一覧 ├政府車両一覧 ├バイク、自転車一覧 ├バイク一覧 ├自転車一覧 ├その他車両一覧 ├船、ボート一覧 ├ヘリコプター一覧 └飛行機一覧メーカー一覧ファイル一覧 おまけ企業・行政一覧 ラジオ局一覧 2013-05-28 Emperor 2013-05-27 Bullet GT Hustler 登場予定車両 マッスルカー、クラッシック車一覧 Hotknife Unknown Pickup Truck Unknown Pickup Truck 2 Regina 2013-05-26 Akuma 2013-05-24 Bobcat 2013-05-23 コメント/コメント クーペ、スポーツカー一覧 メーカー一覧 Sentinel New Compact Car Patriot コメント/荒らし撲滅署名活動 政府車両一覧 2013-05-20 Boxville カウンター 累計: - 本日: - 昨日: - リンク GTA Wiki GTAV まとめWiki Grand Theft Auto IV乗り物まとめwiki Grand Theft Auto San Andreas 車まとめwiki LCS・VCS車まとめwiki @wiki @wikiご利用ガイド 荒らし撲滅署名活動 ここを編集 rss & コンタクト タグ 更新履歴 RSS Feed 管理者に連絡 タグ一覧 PR |価格比較@price|オークション落札相場@price|無料レンタル日記・無料レンタルブログ@diary|2ch型無料レンタル掲示板@chs|おすすめ iPhone iPad アプリ|おすすめ Androidアプリ|クーポン情報まとめサイト - クー割| @wiki - 無料レンタルウィキサービス|プライバシーポリシー
https://w.atwiki.jp/xbox360gta4/pages/576.html
NOODLE EXCHANGE 概要 日本語:ヌードル・エクスチェンジ 業種:製造業(カップラーメン製造・販売) 所在地:- 解説 Grand Theft Auto San Andreasから登場している店舗名、また製品名。 GTA SAのときには小さな屋台に過ぎなかった。 しかし後に味が大衆に受け入れられたのか、Grand Theft Auto IVではスター・ジャンクションに大看板を構えるまでのカップ麺を商品化している模様。 もちろんモデルは日清・カップヌードルだが、 残念ながら、スター・ジャンクションのモデル:タイムズスクエアからは巨大カップラーメンの看板は撤去され今はない。 看板 過去の店舗
https://w.atwiki.jp/kanzenhousinforever/pages/66.html
エキサイト翻訳祭?の最中に登場した、エセサイト内の楊ゼンの紹介文中の謎の言葉。 前後から察するに通天教主?のことだろう。 しかし元始天尊のG-sanと違ってそのままで父さんにはならないあたりが外国人の限界かもしれない